package main

import (
	"fmt"
	"math"
)

/*
	现有两组服务器A和B，每组有多个算力不同的CPU，其中 A[i] 是 A 组第 i 个CPU的运算能力，B[i] 是 B组 第 i 个CPU的运算能力。
	一组服务器的总算力是各CPU的算力之和。
	为了让两组服务器的算力相等，允许从每组各选出一个CPU进行一次交换，
	求两组服务器中，用于交换的CPU的算力，并且要求从A组服务器中选出的CPU，算力尽可能小。
	sumA-a+b = sumB-b+a
	sumA-sumB = 2a-2b
	a-b = (sumA-sumB)/2
	b = a - (sumA-sumB)/2
	sumA、sumB分别为初始A、B两组服务器的总算力
	a、b分别为A、B两组要交换的CPU算力
*/

func main() {
	fmt.Print("请输入A、B两组CPU的数量：")
	numA, numB := 0, 0
	mapB := make(map[int]struct{})
	fmt.Scanf("%d %d", &numA, &numB)
	cpuA, cpuB := make([]int, numA), make([]int, numB)
	sumA, sumB := 0, 0
	fmt.Print("请输入A组CPU的各个算力：")
	for i := 0; i < numA; i++ {
		fmt.Scanf("%d", &cpuA[i])
		sumA += cpuA[i]
	}
	fmt.Print("请输入B组CPU的各个算力：")
	for i := 0; i < numB; i++ {
		fmt.Scanf("%d", &cpuB[i])
		sumB += cpuB[i]
		mapB[cpuB[i]] = struct{}{}
	}
	minA := math.MaxInt64
	a := 0
	b := 0

	diff := (sumA - sumB) / 2

	for i := 0; i < numA; i++ {
		a = cpuA[i]
		b = a - diff
		if _, ok := mapB[b]; ok {
			if a < minA {
				minA = a
			}
		}
	}
	fmt.Println("ans = ", a, "+", b)
}
